package com.joolun.web.ipaynow;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;

public class UUOrder {

    // 日期格式（前8位）
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
    // 随机数生成器
    private static final Random RANDOM = new Random();
    // 锁（避免多线程同时生成导致重复）
    private static final ReentrantLock LOCK = new ReentrantLock();

    /**
     * 生成18位订单号：yyyyMMdd + 10位唯一标识（毫秒+随机数）
     */
    public static String generateOrderNo() {
        LOCK.lock();
        try {
            // 1. 前8位：年月日
            String datePart = DATE_FORMAT.format(new Date());
            // 2. 中间6位：当前毫秒数的后6位（确保时间维度唯一）
            long timestamp = System.currentTimeMillis();
            String timestampPart = String.valueOf(timestamp % 1000000); // 取后6位
            // 不足6位补0（避免位数不够）
            timestampPart = String.format("%06d", Long.parseLong(timestampPart));

            // 3. 后4位：随机数（补充唯一性）
            int randomNum = RANDOM.nextInt(10000); // 0-9999
            String randomPart = String.format("%04d", randomNum);

            // 组合：8 + 6 + 4 = 18位
            return datePart + timestampPart + randomPart;
        } finally {
            LOCK.unlock();
        }
    }

    // 测试
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(generateOrderNo());
        }
    }
}
